package main

import (
	"fmt"
	"log"
	"net/http"
)
// 此结构体类型实现了 handler接口，因此它的实例可以处理 http请求
type Engine struct {

}

func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) {
	switch req.URL.Path {
	case "/":
		fmt.Fprintf(w, "欢迎来到首页！！！！！！")
	case "/hello":
		for k, v := range req.Header {
			fmt.Fprintf(w, "%q--->%q\n", k, v)
		}
	default:
		fmt.Fprintf(w, "你输入的网址有误！！！！！")
	}


}

// net模块下的 http 包提供基础web功能
func main() {
	engine := new(Engine)
	// 根据不同的 http 请求调用不同的处理函数
	//http.HandleFunc("/", handler)
	//http.HandleFunc("/hello", hellohandler)
	// hanler 代表处理所有http 请求的实例
	// handler 为 接口 此接口包含 ServeHTTP(ResponseWriter, *Request) 方法
	// 任何实现此接口的实例，就可以处理 http 请求
	log.Fatalln(http.ListenAndServe(":9999", engine))
}


func handler(w http.ResponseWriter, req *http.Request) {
	fmt.Fprintf(w, "这是根路径！！！！！！！")
}

func hellohandler(w http.ResponseWriter, req *http.Request) {
	for k, v := range req.Header {
		fmt.Fprintf(w, "%q ---> %q\n", k, v)
	}
}

